// 引入依赖
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const noteRoute = require('./router/noteApi');

// 初始化express应用
const app = express();

// 解析json请求体，一定要放在所有路由之前，确保所有路由都能正确解析 JSON 请求体。
app.use(bodyParser.json());

// 允许跨域请求，尽量放在所有路由的最前面
app.use(cors());

// 将用户路由挂载到 /api/users 路径
app.use('/api/note', noteRoute);

// // 响应封装函数 todo: 以后再优化
// const responseWrapper = (data, code = 200, msg = 'Success') => {
//     return {
//         code,
//         msg,
//         data
//     };
// };
//
// // 响应封装中间件
// const responseAdvice = (req, res, next) => {
//     const originalSend = res.send;
//     res.send = function (body) {
//         // 如果响应已经是封装好的格式，则不进行二次封装
//         if (body && typeof body === 'object' && body.status && body.message && body.data) {
//             originalSend.call(this, body);
//         } else {
//             const wrappedResponse = responseWrapper(body);
//             originalSend.call(this, wrappedResponse);
//         }
//     };
//     next();
// };

// 应用响应封装中间件
// app.use(responseAdvice);


// 全局异常捕获
process.on('uncaughtException', (err) => {
    console.error('未捕获的异常:', err);
    // 可以在这里进行一些清理操作，然后退出进程
    process.exit(1);
});

process.on('unhandledRejection', (reason, promise) => {
    console.error('未处理的 Promise 拒绝:', reason);
    // 可以在这里进行一些清理操作，然后退出进程
    process.exit(1);
});

// 错误处理中间件，必须要放到所有路由的最后面
app.use((err, req, res, next) => {
    console.error('捕获的异常:', err);
    res.status(500).json({
        code: 500,
        msg: '服务器内部错误',
        data: err.message
    });
})

// 设置端口号
const args = process.argv.slice(2); // 去掉前两个参数（node和脚本文件名），只保留命令行参数
const port = args[0]? parseInt(args[0], 10) : 4000; // 解析端口号为整数，如果没有设置端口号默认为3000

app.listen(port, () => {
    console.log(`服务已启动，监听端口号：${port}`);
})



